﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using QuanLyThuPhiTaiLieu.Common;
using QuanLyThuPhiTaiLieu.Entity;
using QuanLyThuPhiTaiLieu.Model;

namespace QuanLyThuPhiTaiLieu.Biz
{
    public class PhieuBanGiaoTaiLieuChiTietBiz : BaseBiz
    {
        public int SaveItem(PhieuBanGiaoTaiLieuChiTiet item)
        {
            var dbContext = new Context();

            dbContext.PhieuBanGiaoTaiLieuChiTiets.Add(item);
            int newId = dbContext.SaveChanges();

            return newId;
        }

        public void UpdateItem(PhieuBanGiaoTaiLieuChiTiet item)
        {
            var dbContext = new Context();
            dbContext.Entry(item).State = EntityState.Modified;
            dbContext.SaveChanges();
        }

        public List<PhieuBanGiaoTaiLieuChiTiet> ViewAll()
        {
            var dbContext = new Context();
            return (from item in dbContext.PhieuBanGiaoTaiLieuChiTiets
                    orderby item.Id ascending
                    select item).ToList();
        }

        public PhieuBanGiaoTaiLieuChiTiet LoadItem(int id)
        {
            var dbContext = new Context();
            return (from item in dbContext.PhieuBanGiaoTaiLieuChiTiets
                    where item.Id == id
                    select item).First();
        }

        public void RemoveItem(List<PhieuBanGiaoTaiLieuChiTiet> items)
        {
            var dbContext = new Context();
            foreach (var tailieu in items)
            {
                dbContext.PhieuBanGiaoTaiLieuChiTiets.Attach(tailieu);
                dbContext.PhieuBanGiaoTaiLieuChiTiets.Remove(tailieu);
                dbContext.Entry(tailieu).State = EntityState.Deleted;
            }

            dbContext.SaveChanges();
        }

        public List<PhieuBanGiaoTaiLieuChiTiet> LoadItemsByParentId(int parentId)
        {
            var dbContext = new Context();
            return (from item in dbContext.PhieuBanGiaoTaiLieuChiTiets
                    orderby item.Id ascending
                    where item.PhieuBanGiao == parentId
                    select item).ToList().OrderBy(item => item.GroupValue).ThenBy(item => item.MaTaiLieuValue).ThenBy(item => item.MaTaiLieuIndexValue).ToList();
        }

        public List<ThongKeTaiLieuCungCap> LoadItemsByIsAndParam(List<int> ids, string loaiTaiLieu, string dangTaiLieu, string tenTaiLieu, string maTaiLieu)
        {
            if (ids.Count > 0)
            {
                var dbContext = new Context();
                return (from item in dbContext.PhieuBanGiaoTaiLieuChiTiets
                        join parent in dbContext.PhieuBanGiaoTaiLieus on item.PhieuBanGiao equals parent.Id                        
                        where
                        (ids.Contains(item.PhieuBanGiao)) &&
                        (item.LoaiTaiLieu == loaiTaiLieu || string.IsNullOrEmpty(loaiTaiLieu)) &&
                        (item.DangTaiLieu == dangTaiLieu || string.IsNullOrEmpty(dangTaiLieu)) &&
                        (item.TenTaiLieu == tenTaiLieu || string.IsNullOrEmpty(tenTaiLieu)) &&
                        (item.MaTaiLieu == maTaiLieu || string.IsNullOrEmpty(maTaiLieu))
                        orderby item.Id ascending
                        select new ThongKeTaiLieuCungCap
                        {
                            TenTaiLieu = item.TenTaiLieu,
                            ThanhTien = item.ThanhTien,
                            NoiDungYeuCau = item.NoiDungYeuCau,
                            NguoiNhan = parent.NguoiNhan,
                            Nam = parent.Nam,
                            DangTaiLieu = item.DangTaiLieu,
                            DonGia = item.DonGia,
                            DonVi = parent.DonVi,
                            DonViTinh = item.DonViTinh,
                            LoaiTaiLieu = item.LoaiTaiLieu,
                            MaTaiLieu = item.MaTaiLieu,
                            SoLuong = item.SoLuong,
                            Id = item.Id
                        }
                        ).ToList();
            }
            else
            {
                var dbContext = new Context();

                if (string.IsNullOrEmpty(loaiTaiLieu) && string.IsNullOrEmpty(dangTaiLieu) && string.IsNullOrEmpty(tenTaiLieu) && string.IsNullOrEmpty(maTaiLieu))
                {
                    return null;
                }

                return (from item in dbContext.PhieuBanGiaoTaiLieuChiTiets
                        join parent in dbContext.PhieuBanGiaoTaiLieus on item.PhieuBanGiao equals parent.Id                        
                        where                        
                        (item.LoaiTaiLieu == loaiTaiLieu || string.IsNullOrEmpty(loaiTaiLieu)) &&
                        (item.DangTaiLieu == dangTaiLieu || string.IsNullOrEmpty(dangTaiLieu)) &&
                        (item.TenTaiLieu == tenTaiLieu || string.IsNullOrEmpty(tenTaiLieu)) &&
                        (item.MaTaiLieu == maTaiLieu || string.IsNullOrEmpty(maTaiLieu))
                        orderby item.Id ascending
                        select new ThongKeTaiLieuCungCap
                        {
                            TenTaiLieu = item.TenTaiLieu,
                            ThanhTien = item.ThanhTien,
                            NoiDungYeuCau = item.NoiDungYeuCau,
                            NguoiNhan = parent.NguoiNhan,
                            Nam = parent.Nam,
                            DangTaiLieu = item.DangTaiLieu,
                            DonGia = item.DonGia,
                            DonVi = parent.DonVi,
                            DonViTinh = item.DonViTinh,
                            LoaiTaiLieu = item.LoaiTaiLieu,
                            MaTaiLieu = item.MaTaiLieu,
                            SoLuong = item.SoLuong,
                            Id = item.Id
                        }
                        ).ToList();
            }
        }
    }
}
